package com.borened.common.core.base;

import com.fasterxml.jackson.annotation.JsonIgnore;

import java.util.List;

/**
 * <p>
 * Treeifyable 定义了可树化的接口,通过实现此接口而不是继承一个通用的树形实体
 * 目的是方便业务上可以自定义树字段的命名，同时获得TreeTool的能力。
 * 主要用于构建TreeSelectVO 对象时需要的树形递归属性。
 * </p>
 *
 * @author: cch
 * @since: 2021/12/22
 */
public interface Treeifyable<N> {
    /**
     * 获取节点id
     *
     * @return
     */
    @JsonIgnore
    String getNodeId();

    /**
     * 节点名称
     *
     * @return
     */
    @JsonIgnore
    String getNodeName();

    /**
     * 获取父节点id
     *
     * @return
     */
    @JsonIgnore
    String getParentNodeId();

    /**
     * 子节点集合
     *
     * @return
     */
    @JsonIgnore
    List<N> getChildNodes();

    /**
     * 设置子节点集合
     *
     * @param childNodes
     */
    void setChildNodes(List<N> childNodes);
}
